package interfaces;

import javax.swing.*;

import excecoes.FormaDeContatoInvalida;

import agenda.*;

import java.awt.event.*;
import java.awt.*;

public class CriaContato extends JDialog implements ActionListener{

	//frame
	private JFrame frame;

	//paineis
	private JPanel painel1;
	private JPanel painel2;
	private JPanel painel3;
	private JPanel painel4;
	private JPanel painelSkype;
	private JPanel painelEmail;
	private JPanel painelTelefone;
	private JPanel painelComentario;
	private JPanel painelComentarioDone;

	//Labels
	private JLabel labelNome = new JLabel("       Nome: ");
	private JLabel labelEndereco = new JLabel("Endereco: ");
	private JLabel labelNiver = new JLabel("Data de Aniversario:");
	private JLabel labelFContato = new JLabel("Forma de Contato:");
	private JLabel labelSkype = new JLabel("Skype:");
	private JLabel labelEmail = new JLabel("Email:");
	private JLabel labelTelefone = new JLabel("Telefone:");
	private JLabel labelComentario1 = new JLabel("Deseja por Comentario?");
	private JLabel labelComentario2 = new JLabel("Comentario: ");

	//Texts
	private JTextField campoNome = new JTextField(40);
	private JTextField campoEndereco = new JTextField(40);
	private JTextField campoSkype = new JTextField(20);
	private JTextField campoEmail = new JTextField(20);
	private JTextField campoTelefone = new JTextField(20);;
	private JTextArea campoComentario = new JTextArea(10,35);

	//Combos
	private JComboBox comboDia = new JComboBox();
	private JComboBox comboMes = new JComboBox();

	//Radios/Check Buttons
	private ButtonGroup formasContato = new ButtonGroup();
	private JRadioButton radioSkype = new JRadioButton("Skype");
	private JRadioButton radioTelefone = new JRadioButton("Telefone");
	private JRadioButton radioEmail = new JRadioButton("Email");
	private JCheckBox checkComentario = new JCheckBox("Sim");

	private JScrollPane comentarioScroll;

	//Buttons
	private JButton voltar = new JButton("Voltar");
	private JButton salvar = new JButton("Salvar");

	private JLabel nextLine = new JLabel("                                                                                     ");

	private IContatos iContatos;

	//linha do row
	private int linhaSelecionada;

	//condicao de verificacao se h� ou n�o uma edicao em um contato
	private boolean condicao = false;

	// enum com todos os meses da combo box
	public enum Meses {
		JANEIRO, FEVEREIRO, MARCO, ABRIL, MAIO, JUNHO, JULHO,
		AGOSTO, SETEMBRO, OUTUBRO, NOVEMBRO, DEZEMBRO;
	}


	public CriaContato(IContatos novo) {
		this.iContatos = novo;
	}

	public CriaContato(IContatos novo,int linhaSelecionada, String nome, String endereco,
		String dataNiver, String formaContato, String descricao) {

		this(novo);
		this.linhaSelecionada = linhaSelecionada;
		this.campoNome.setText(nome);
		this.campoEndereco.setText(endereco);
		//this.comboDia.setSelectedIndex();
		//this.comboMes.setSelectedIndex();
		this.campoComentario.setText(descricao);
		this.condicao = true;
	}

    public void iniciaJanela(){
    	frame = new JFrame("Cria Contato");
        int tamanhol = 530,tamanhoc = 500;
        frame.setSize(tamanhol,tamanhoc);
        //layouts
        FlowLayout layoutf = new FlowLayout(FlowLayout.LEFT);
        FlowLayout layoutc = new FlowLayout(FlowLayout.CENTER);

        //Scroll
        comentarioScroll = new JScrollPane(campoComentario,
        					JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
        					JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

        //Add radios buttons ao button group
        formasContato.add(radioSkype);
        formasContato.add(radioTelefone);
        formasContato.add(radioEmail);


        comboMes.addItem(Meses.JANEIRO); comboMes.addItem(Meses.FEVEREIRO);
        comboMes.addItem(Meses.MARCO); comboMes.addItem(Meses.ABRIL);
        comboMes.addItem(Meses.MAIO); comboMes.addItem(Meses.JUNHO);
        comboMes.addItem(Meses.JULHO); comboMes.addItem(Meses.AGOSTO);
        comboMes.addItem(Meses.SETEMBRO); comboMes.addItem(Meses.OUTUBRO);
        comboMes.addItem(Meses.NOVEMBRO); comboMes.addItem(Meses.DEZEMBRO);

        for (int ii = 1;ii <= 30;ii++) comboDia.addItem(String.format("%02d", ii));

        //paineis
        painel1 = new JPanel(layoutc);
        painel2 = new JPanel(layoutf);
        painel3 = new JPanel(layoutf);
        painel4 = new JPanel(layoutc);
        painelSkype = new JPanel(layoutf);
        painelEmail = new JPanel(layoutf);
        painelTelefone = new JPanel(layoutf);
        painelComentario = new JPanel(layoutf);
        painelComentarioDone = new JPanel(layoutf);

        JPanel painelglobal = new JPanel(layoutf);

        //acao dos buttons
        salvar.addActionListener(this);
        voltar.addActionListener(this);

        //Adicionando nos paineis
        painel1.add(labelNome);
        painel1.add(campoNome);
        painel2.add(labelEndereco);
        painel2.add(campoEndereco);
        painel3.add(labelNiver);
        painel3.add(comboDia);
        painel3.add(comboMes);
        painel4.add(labelFContato);
        painel4.add(radioSkype);
        painel4.add(radioTelefone);
        painel4.add(radioEmail);
        painelSkype.add(labelSkype);
        painelSkype.add(campoSkype);
        painelTelefone.add(labelTelefone);
        painelTelefone.add(campoTelefone);
        painelEmail.add(labelEmail);
        painelEmail.add(campoEmail);
        painelComentario.add(labelComentario1);
        painelComentario.add(checkComentario);
        painelComentarioDone.add(labelComentario2);
        painelComentarioDone.add(comentarioScroll);
        painelglobal.add(painel1);
        painelglobal.add(painel2);
        painelglobal.add(painel3);
        painelglobal.add(painel4);
        painelglobal.add(painelSkype);
        painelglobal.add(painelTelefone);
        painelglobal.add(painelEmail);
        painelglobal.add(painelComentario);
        painelglobal.add(painelComentarioDone);
        painelglobal.add(nextLine);
        painelglobal.add(salvar);
        painelglobal.add(voltar);

        painelSkype.setVisible(false);
        painelTelefone.setVisible(false);
        painelEmail.setVisible(false);
        painelComentarioDone.setVisible(false);

        frame.setContentPane(painelglobal);
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation( WindowConstants.
                		 				HIDE_ON_CLOSE);

        //Eventos nos radios/check
        radioSkype.addActionListener (new ActionListener() {
        	public void actionPerformed (ActionEvent e) {
        		habilitaRadio();
        	}});
        radioTelefone.addActionListener (new ActionListener() {
        	public void actionPerformed (ActionEvent e) {
        		habilitaRadio();
        	}});
        radioEmail.addActionListener (new ActionListener() {
        	public void actionPerformed (ActionEvent e) {
        		habilitaRadio();
        	}});
        checkComentario.addActionListener (new ActionListener() {
        	public void actionPerformed (ActionEvent e) {
        		habilitaBox(checkComentario,painelComentarioDone);
        	}});

    }

        public void habilitaRadio() {
        	if(radioEmail.isSelected()){
        		painelEmail.setVisible(true);
        	} else {
        		painelEmail.setVisible(false);
        	}
        	if(radioSkype.isSelected()) {
        		painelSkype.setVisible(true);
        	} else {
        		painelSkype.setVisible(false);
        	}
        	if(radioTelefone.isSelected()) {
        		painelTelefone.setVisible(true);
        	} else {
        		painelTelefone.setVisible(false);
        	}
        }

        public void habilitaBox(JCheckBox box, JPanel pane) {
        	if(box.isSelected()) {
        		pane.setVisible(true);
        	} else {
        		pane.setVisible(false);
        	}
        }

        private FormaDeContato formaDeContato;
        public void defineFormaContato() throws FormaDeContatoInvalida {
        	if(radioSkype.isSelected())
        		this.formaDeContato = new Skype(campoSkype.getText());
        	else if(radioTelefone.isSelected())
        		this.formaDeContato = new Telefone(campoTelefone.getText());
        	else if(radioEmail.isSelected())
        		this.formaDeContato = new Email(campoEmail.getText());

        }


    	@Override
    	public void actionPerformed(ActionEvent e) {
    		Object obj = e.getSource();

    		if(obj.equals(voltar)) {
    			frame.dispose();

    		} else if(obj.equals(salvar)) {

    			int resposta;
    			if(condicao) {

    				//se condicao for true indica que � uma altera��o.
    				resposta = JOptionPane.showConfirmDialog(this,
    				"Salvar Altera��es?",
    				"Edicao",
    				JOptionPane.OK_CANCEL_OPTION,
    				JOptionPane.QUESTION_MESSAGE);

    				if (resposta == JOptionPane.OK_OPTION){
    					Contato c = iContatos.user.getAgenda().getContatos().get(linhaSelecionada);
    					try{
    						defineFormaContato();
    						c.setNome(campoNome.getText());
    						c.setEndereco(campoEndereco.getText());
    						c.setDataAniversario(comboDia.getSelectedItem()+"/"+
    											String.format("%02d", (comboMes.getSelectedIndex()+1))+"/"+1900);
    						c.addFormaDeContato(formaDeContato);
    					}catch(Exception ex) {
    						JOptionPane.showMessageDialog(this,
        							ex.getMessage(),
        							"Edi��o",
        							JOptionPane.ERROR_MESSAGE);
    						return;
    					}

    					JOptionPane.showMessageDialog(this,
    							"Altera��o efetuada com sucesso!",
    							"Edi��o",
    							JOptionPane.INFORMATION_MESSAGE);

    					iContatos.redefineTabela(new String[]{ c.getNome(),
    										c.getEndereco(),
    										c.getDataAniversarioFormatada(),
    										c.getFormasDeContato().toString(),//TODO forma de contato... =x
    										""});

    					this.dispose();
    				}

    			} else {

    				Contato c1 = null;
    				//se for false eh uma adicao de contato
    				resposta = JOptionPane.showConfirmDialog(this,
    				"Adcionar contato?",
    				"Add Contato",
    				JOptionPane.OK_CANCEL_OPTION,
    				JOptionPane.QUESTION_MESSAGE);

    				if (resposta == JOptionPane.OK_OPTION){

    					//fazendo a inclus�o do contato na agenda
    					try {

    						defineFormaContato();
    						c1 = new Contato(campoNome.getText(), campoEndereco.getText(),
    								(comboDia.getSelectedItem()+"/"+String.format("%02d", (comboMes.getSelectedIndex()+1))+"/"+1900),
    								formaDeContato);
    						iContatos.user.addContato(c1);

    					} catch(Exception ex) {
    						ex.printStackTrace();
    						JOptionPane.showMessageDialog(this,
        							ex.getMessage(),
        							"Edi��o",
        							JOptionPane.ERROR_MESSAGE);
    						return;
    					}

    					JOptionPane.showMessageDialog(this,
    						"Novo contato adicionado!",
    						"Novo Contato",
    						JOptionPane.INFORMATION_MESSAGE);

    					//adiciona uma linha nova de cadastro na tela pricipal da agenda
    					iContatos.addRow(new String[]{ c1.getNome(),
    								c1.getEndereco(),
    								c1.getDataAniversarioFormatada(),
    								c1.getFormasDeContato().toString(),//TODO forma de contato.. =x
    								""});

    						this.dispose();
    				}
    			}
    		}
    	}
}
